home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / CALLCLI.C < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-28  |  2.0 KB  |  83 lines

  1. #include "global.h"
  2. #if defined(CALLCLI) || defined(SAMCALLB) || defined(QRZCALLB)
  3. #include "commands.h"
  4. #include "mbuf.h"
  5. #include "socket.h"
  6. #include "session.h"
  7. #include "netuser.h"
  8.  
  9. #if !defined(_lint)
  10. static char rcsid[] OPTIONAL = "$Id: callcli.c,v 1.13 1997/06/28 16:46:13 root Exp root $";
  11. #endif
  12.  
  13. extern char *Callserver;
  14.  
  15.  
  16. int
  17. docallbook (argc, argv, p)
  18. int argc;
  19. char *argv[];
  20. void *p OPTIONAL;
  21. {
  22. struct sockaddr_in sock;
  23. char const *cp;
  24. int s, i;
  25. struct mbuf *bp;
  26. struct session *sp;
  27.  
  28.     /* Allocate a session descriptor */
  29.     if ((sp = newsession (argv[1], FINGER, 0)) == NULLSESSION) {
  30.         tputs (TooManySessions);
  31.         (void) keywait (NULLCHAR, 1);
  32.         return 1;
  33.     }
  34.     if (Callserver == NULLCHAR) {
  35.         tputs ("Callbook Services Not Configured.\n");
  36.         (void) keywait (NULLCHAR, 1);
  37.         freesession (sp);
  38.         return 1;
  39.     }
  40.     sp->ttystate.echo = sp->ttystate.edit = 0;
  41.     sp->flowmode = 1;
  42.     sock.sin_family = AF_INET;
  43. #ifndef newcode
  44.     sock.sin_port = IPPORT_CALLDB;
  45. #else
  46.     sock.sin_port = IPPORT_FINGER;
  47. #endif
  48.     for (i = 1; i < argc; i++) {
  49.         cp = Callserver;
  50.         (void) strupr (argv[i]);
  51.         tprintf ("Looking up \"%s\" in the callbook at %s\n", argv[i], cp);
  52.         if ((sock.sin_addr.s_addr = resolve (cp)) == 0) {
  53.             tprintf ("Callserver %s unknown\n", cp);
  54.             continue;
  55.         }
  56.         tprintf ("trying %s", psocket ((struct sockaddr *) &sock));
  57.         if ((sp->s = s = socket (AF_INET, SOCK_STREAM, 0)) == -1) {
  58.             tputs ("Can't create socket\n");
  59.             break;
  60.         }
  61.         (void) sockmode (s, SOCK_ASCII);
  62.         if (connect (s, (char *) &sock, sizeof (sock)) == -1) {
  63.             cp = sockerr (s);
  64.             tprintf (" -- Connect failed: %s\n", cp != NULLCHAR ? cp : "");
  65.             close_s (s);
  66.             sp->s = -1;
  67.             continue;
  68.         }
  69.         tputc ('\n');
  70.         usprintf (s, "%s\n", argv[i]);
  71.         usflush (Curproc->output);
  72.         while (recv_mbuf (s, &bp, 0, NULLCHAR, (int *) 0) > 0)
  73.             (void) send_mbuf (Curproc->output, bp, 0, NULLCHAR, 0);
  74.         close_s (s);
  75.         sp->s = -1;
  76.     }
  77.     (void) keywait (NULLCHAR, 1);
  78.     freesession (sp);
  79.     return 0;
  80. }
  81.  
  82. #endif /* CALLCLI */
  83.